
import EnvConfig from "../config/EnvConfig";
import ItemX from "../entity/ItemX";
import UnitX from "../entity/UnitX";
import ItemXManager from "../module/obj_container/ItemXManager";
import UnitXManager from "../module/obj_container/UnitXManager";
import L_Run from "../utils/L_Run";
import L_String from "../utils/L_String";
import * as CJD from "../types/define";
import CrossRelTrg from "./CycleDepTrg";

/**物品相关注册触发器  */
export default class ItemAboutInitTrg{
 

     /**物品获取丢弃影响单位属性变化trg */
   private  static itemGDTrg:trigger | any=undefined
   
   /**触发器初始化 */
   public static init(){

      this.itemGDTrg=L_Run.CreateTrigger_L();
      CrossRelTrg.itemDestroyTrg=L_Run.CreateTrigger_L();
      //*********单位获取丢弃属性物品的属性变化触发**********/
      //为所有玩家所有单位注册事件
      L_Run.initAllPlayerEvent((index:number)=>{TriggerRegisterPlayerUnitEvent(this.itemGDTrg, Player(index), CJD.EVENT_PLAYER_UNIT_DROP_ITEM(), null)})
      L_Run.initAllPlayerEvent((index:number)=>{TriggerRegisterPlayerUnitEvent(this.itemGDTrg, Player(index), CJD.EVENT_PLAYER_UNIT_PICKUP_ITEM(), null)})
      console.log("itemGDTrg添加事件完成")
      TriggerAddAction(this.itemGDTrg,()=>{
          if ( CJD.EVENT_PLAYER_UNIT_PICKUP_ITEM() == GetTriggerEventId()){
              console.log("---------- 拾取装备获得属性")
              //是获取物品事件 增加物品对应的属性
              this.unitGetItemIncAttr(GetTriggerUnit(),GetManipulatedItem())
          }else if( CJD.EVENT_PLAYER_UNIT_DROP_ITEM() == GetTriggerEventId()) {
              //是丢弃物品事件 减少物品对应的属性
              console.log("---------- 丢弃装备失去属性:")
              this.unitDropItemDecAttr(GetTriggerUnit(),GetManipulatedItem())
          }else{
              console.log("【ERROR】触发器itemGDTrg异常调用！")
          }
      })
      console.log("itemGDTrg 添加action完成")

      //*********属性物品被摧毁,贩卖的注销动作**********/
      L_Run.initAllPlayerEvent((index:number)=>{TriggerRegisterPlayerUnitEvent(CrossRelTrg.itemDestroyTrg, Player(index), CJD.EVENT_PLAYER_UNIT_SELL_ITEM(), null)})
      console.log("itemDestroyTrg 添加事件完成")
      // TriggerRegisterUnitEvent( itemDestroyTrg, unit_handle, CJ.EVENT_UNIT_SELL_ITEM )
      //单位获取丢弃物品事件
      TriggerAddAction(CrossRelTrg.itemDestroyTrg,()=>{
          let it:any=GetTriggerWidget()  
          if(it!=null){
              ItemXManager.destoryItemx(it)
          }
      })
      console.log("itemDestroyTrg 初始化完成")

   }

 





   /**单位获取物品改变属性 */
   private static unitGetItemIncAttr(u:unit,it:item){
      //如果是没有被ItemX全局管理的对象 理论上不应该出现需要添加属性的情况 TODO可能会有特殊情况需要考虑？  
      //这里检查主要还是物品强化的触发顺序问题
      if(!ItemXManager.validatedItemX(it)) return
      let itx:ItemX=ItemXManager.getItemxAutoInitNil(it)
      let ux:UnitX=UnitXManager.getUnitxAutoInitNil(u)
      ux.incrUnitAttrs(itx)
   }

   /**单位失去物品改变属性 */
   private static unitDropItemDecAttr(u:unit,it:item){
      //如果是没有被ItemX全局管理的对象 理论上不应该出现需要移除属性的情况 TODO可能会有特殊情况需要考虑？  
      //这里检查主要还是物品强化的触发顺序问题
      if(!ItemXManager.validatedItemX(it)) return
      let itx:ItemX=ItemXManager.getItemxAutoInitNil(it)
      console.log("-----丢弃装备的属性是:",L_String.getObjJSONStr(itx))
      let ux:UnitX=UnitXManager.getUnitxAutoInitNil(u)
      ux.redcUnitAttrs(itx)
   }

  
}  